package br.ucb.cesbdao.persistencia.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;

import br.ucb.cesbdao.persistencia.AbstractConnectionDAO;
import br.ucb.cesbdao.persistencia.factory.FactoryConnection;
import br.ucb.cesbdao.relatoriosDTO.EncaminhamentoRl;

public class TipoEncaminhamentoDoAtendimentoDAO extends AbstractConnectionDAO{

	private static final String sqlDelbyAtendimento = "DELETE FROM daoAtende_tipoEncaminha WHERE idAtendimento = ?;";
	private static final String sqlDell = "DELETE FROM daoAtende_tipoEncaminha WHERE idAtendimento = ? and idTipoEncaminha = ?;";
	private static final String sqlByIds = "SELECT *FROM daoAtende_tipoEncaminha WHERE idTipoEncaminha = ? and idAtendimento = ?;";
	private static final String sqlAdd = "INSERT INTO daoAtende_tipoEncaminha VALUES(?,?);";
	private static final String sqlDelbyEncaminha = "DELETE FROM daoAtende_tipoEncaminha WHERE idTipoEncaminha = ?;";
	private static final String sqlContMes = "select count(*) from daoAtendimento da, daoAtende_tipoEncaminha dte, daoEncaminhamento de where de.idTipoEncaminha = ? and   de.idTipoEncaminha = dte.idTipoEncaminha and   da.idAtendimento = dte.idAtendimento and   EXTRACT(month FROM da.data) = ?;";
	private static final String sqlEncaminhaByPeriodo = "SELECT count(*), E.descricao, A.data "+
														"FROM daoencaminhamento E,daoatende_tipoencaminha AE,daoatendimento A "+
														"WHERE E.idTipoEncaminha = AE.idTipoEncaminha and "+
														"AE.idAtendimento = A.idAtendimento and "+
														"A.data >= ? and "+
														"A.data <= ? "+
														"group by DATE_FORMAT(A.data,'%c'),E.descricao;";	

	public TipoEncaminhamentoDoAtendimentoDAO(Connection conexao) {
		super(conexao);
	}
	
	public  void DellByIdAtendimento(int idAtendimento) throws SQLException, ClassNotFoundException {
		PreparedStatement stm = getConexao().prepareStatement(sqlDelbyAtendimento);
		stm.setInt(1,idAtendimento);
		stm.execute();
		FactoryConnection.getInstance().closeConexao(stm);
	}


	public  void dell(int idAtendimento, int idEncaminha) throws SQLException, ClassNotFoundException {
		PreparedStatement stm = getConexao().prepareStatement(sqlDell);
		stm.setInt(1,idAtendimento);
		stm.setInt(2,idEncaminha);
		stm.execute();
		FactoryConnection.getInstance().closeConexao(stm);
	}
	
	public  boolean getByIdAtend_idEncaminha(int idAtendimento, int idEncaminha) throws SQLException, ClassNotFoundException {
		PreparedStatement stm = getConexao().prepareStatement(sqlByIds);
		stm.setInt(1,idEncaminha);
		stm.setInt(2,idAtendimento);
		ResultSet rs = stm.executeQuery();
		if(rs.first()){
			FactoryConnection.getInstance().closeConexao(stm, rs);
			return true;
		}
		FactoryConnection.getInstance().closeConexao(stm, rs);
		return false;
	}
	
	public  void add(int idAtendimento, int idEncaminha) throws SQLException, ClassNotFoundException {
		PreparedStatement stm = getConexao().prepareStatement(sqlAdd);
		stm.setInt(1,idAtendimento);
		stm.setInt(2,idEncaminha);
		stm.execute();
		FactoryConnection.getInstance().closeConexao(stm);
	}


	public  void DellByIdEncaminha(int idTipoEncaminha) throws SQLException, ClassNotFoundException {
		PreparedStatement stm = getConexao().prepareStatement(sqlDelbyEncaminha);
		stm.setInt(1,idTipoEncaminha);
		stm.execute();
		FactoryConnection.getInstance().closeConexao(stm);
	}


	public  int getByMes(int id,int i) throws SQLException, ClassNotFoundException {
		Integer cont = 0;
		PreparedStatement stm = getConexao().prepareStatement(sqlContMes);
		stm.setInt(1,id);
		stm.setInt(2, i);
		ResultSet rs = stm.executeQuery();
		if(rs.first())
			cont = rs.getInt(1);
		FactoryConnection.getInstance().closeConexao(stm, rs);
		return cont;
	}


	public  ArrayList<EncaminhamentoRl> getByPeriodo(Date dataInicio,
			Date dataFim) throws SQLException, ClassNotFoundException {
		
		ArrayList<EncaminhamentoRl> encaminhamentoRls = new ArrayList<EncaminhamentoRl>();
		PreparedStatement stm = getConexao().prepareStatement(sqlEncaminhaByPeriodo);
		stm.setDate(1, new java.sql.Date(dataInicio.getTime()));
		stm.setDate(2, new java.sql.Date(dataFim.getTime()));
		ResultSet rs = stm.executeQuery();
		while(rs.next()){
			encaminhamentoRls.add(new EncaminhamentoRl(rs.getInt(1),rs.getString(2),rs.getString(3)));
		}
			
		return encaminhamentoRls;
	}



}
